
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>1、类和对象 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>1、类和对象 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">面向对象编程（OOP）的三个核心概念是什么？请简要描述。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 封装（Encapsulation）：将数据和操作封装在一个类中，对外部隐藏对象的内部细节，提供统一的访问接口。<br>2. 继承（Inheritance）：子类可以继承父类的属性和方法，并在此基础上进行扩展或修改。<br>3. 多态（Polymorphism）：不同类的对象可以对同一消息做出不同的响应，即同一个方法在不同对象中具有不同的行为。</div>
          </div>
          <div class="card-source">来源: 面向对象思想</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">概念</div>
          <div class="card-question">请解释类（Class）和对象（Object）之间的关系。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">类和对象可以理解为模板和实例的关系。类是对一类事物共同属性和行为的抽象描述，是创建对象的模板。对象则是类的实例化结果，是根据类的定义创建的实际实例，是内存中的一个实体。</div>
          </div>
          <div class="card-source">来源: 类和对象的关系</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">封装在面向对象编程中的主要作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">封装的作用主要有三点：<br>1. 隐藏实现细节：降低代码的耦合性，提高代码的可维护性和可重用性。<br>2. 保护数据安全：防止外部代码直接修改对象的内部数据，保证数据的安全性和一致性。<br>3. 简化接口：向外部暴露简洁清晰的接口，提高代码的可读性和易用性。</div>
          </div>
          <div class="card-source">来源: 封装</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">概念</div>
          <div class="card-question">什么是构造方法（Constructor）？它有哪些重要特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">构造方法是一种特殊类型的方法，用于在创建对象时初始化对象的状态。其重要特点包括：<br>1. 构造方法与类同名，没有返回类型。<br>2. 构造方法可以有多个重载形式。<br>3. 如果一个类没有明确定义构造方法，编译器会自动生成一个默认的无参构造方法。</div>
          </div>
          <div class="card-source">来源: 构造方法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">多态是如何通过继承和方法重写实现的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">运行时多态是通过继承和方法重写来实现的。子类继承父类并重写其方法，程序中可以使用父类类型的引用指向子类的对象。当通过这个父类引用调用被重写的方法时，实际执行的是子类中的方法，从而实现了同一操作在不同对象上的不同行为。</div>
          </div>
          <div class="card-source">来源: 多态</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">继承机制为面向对象编程带来了哪些主要好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">继承的主要作用包括：<br>1. 代码复用：允许子类重用父类的代码，减少重复编写。<br>2. 抽象和泛化：能够将相关的类归纳为一个抽象概念，使代码更易于理解和管理。<br>3. 多态性：继承是实现多态性的基础。</div>
          </div>
          <div class="card-source">来源: 继承</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">概念</div>
          <div class="card-question">类的成员通常分为哪两类？请分别说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">类的成员可以分为两类：<br>1. 属性（字段）：描述对象特征的变量，表示对象的状态或属性。<br>2. 方法：定义在类中的函数或操作，用于描述对象的行为或功能。</div>
          </div>
          <div class="card-source">来源: 类成员</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">实例方法（Instance Method）有哪些主要特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">实例方法的主要特点有：<br>1. 必须通过对象来调用，不能直接通过类名调用。<br>2. 可以访问和操作对象的实例变量。<br>3. 可以有参数和返回值，用于执行具体的逻辑操作。</div>
          </div>
          <div class="card-source">来源: 实列方法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在Java中，定义一个类和实例化一个对象分别使用什么关键字？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在Java中，通过关键字 `class` 来定义一个类。通过使用 `new` 关键字来实例化一个对象。</div>
          </div>
          <div class="card-source">来源: 类和对象的基本概念</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
